package com.jld.managerialsystemforcovid19.controller;

import com.jld.managerialsystemforcovid19.entity.Covid19Data;
import com.jld.managerialsystemforcovid19.entity.LineTrend;
import com.jld.managerialsystemforcovid19.service.IndexService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Controller
public class IndexController {
    @Autowired
    private IndexService indexService;

    //动态获取数据库中中国地图数据渲染到页面
    @RequestMapping("/query")
    @ResponseBody
    public List<Covid19Data> queryData() {
        List<Covid19Data> list = indexService.list();
        return list;
    }

    //跳转pie（饼状图）页面
    @RequestMapping("/toPie")
    public String toPie() {
        return "pie";
    }

    //渲染饼状图数据
    @RequestMapping("/queryPie")
    @ResponseBody
    public List<Covid19Data> queryPieData() {
        List<Covid19Data> list = indexService.list();
        return list;
    }

    //跳转bar（柱状图）页面
    @RequestMapping("/toBar")
    public String toBar() {
        return "bar";
    }

    @RequestMapping("/queryBar")
    @ResponseBody
    //渲染柱状图数据
    public Map<String, Object> queryBarData() {
        /*1.获取城市名称数据  （柱状图x轴-->城市）*/
        //先拿到所有城市的所有疫情数据 (城市名+疫情数据)
        List<Covid19Data> covid19Data = indexService.list();
//        //创建ArrayList集合，将所有城市疫情数据中的name数值拿到并存放到ArrayList集合
//        List<String> cityList = new ArrayList<>();
//        for (Covid19Data c : covid19Data) {
//            //获得每一个城市名
//            String name = c.getName();
//            //将每个城市名放到集合cityList
//            cityList.add(name);
//        }

        List<String> collect1 = covid19Data.stream().map(cityName -> cityName.getName()).collect(Collectors.toList());

        /*2.获取城市所对应疫情数据 （柱状图y轴-->城市疫情数值）*/
//        List<Integer> dataList = new ArrayList<>();
//        for (Covid19Data d : covid19Data) {
//            //获得每一条疫情数据
//            Integer value = d.getValue();
//            //将每一条疫情数据存在集合dataList
//            dataList.add(value);
//        }

        List<Integer> collect2 = covid19Data.stream().map(cityData -> cityData.getValue()).collect(Collectors.toList());

        /*3.将两个list集合放入map集合并返回*/
        Map cityAndData = new HashMap<>();
        cityAndData.put("cityList", collect1);
        cityAndData.put("dataList", collect2);

        return cityAndData;
    }


    //跳转Line（折线图）页面
    @RequestMapping("/toLine")
    public String toLine() {
        return "line";
    }

    //折线图渲染
    //x轴---->日期：周一至周天      y轴----->人数
    @RequestMapping("/queryLine")
    @ResponseBody
    public Map<String, List<Integer>> queryLineData() {
        //1.查询近七天所有的数据
        List<LineTrend> list7DaysData = indexService.findSevenData();
        //2.封装所有确诊人数
        List<Integer> confirmNums = list7DaysData.stream().map(i -> i.getConfirm()).collect(Collectors.toList());
        //3.封装所有隔离人数
        List<Integer> isolationNums = list7DaysData.stream().map(LineTrend::getIsolation).collect(Collectors.toList());
        //4.封装所有治愈人数
        List<Integer> cureNums = list7DaysData.stream().map(LineTrend::getCure).collect(Collectors.toList());
        //5.封装所有死亡人数
        List<Integer> deadNums = list7DaysData.stream().map(LineTrend::getDead).collect(Collectors.toList());
        //6.封装所有疑似病例人数
        List<Integer> similarNums = list7DaysData.stream().map(LineTrend::getSimilar).collect(Collectors.toList());

        //7.将所有list集合放入map集合
        Map<String, List<Integer>> map = new HashMap<>();
        map.put("confirmNums", confirmNums);
        map.put("isolationNums", isolationNums);
        map.put("cureNums", cureNums);
        map.put("deadNums", deadNums);
        map.put("similarNums", similarNums);
        return map;
    }


}
